URL重写实现会话跟踪 - ITSTAR - 博客频道 - CSDN.NET

创建时间:2015/9/24 9:58
来源:http://blog.csdn.net/xh16319/article/details/8464055


分类: JSP 2013-01-04 13:13 1835人阅读 评论(0) 收藏 举报

IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结!


为了防止用户禁用cookie,可以使用URL重写技术来实现会话跟踪!

url重写原理:当服务器程序调用request.getSession();代码时,其会先看request.getCookies()方法中有没有名为JSESSIONID的cookie带过来,如果没有,就看URL有没有被重写(即附带JSESSIONID),如果有,则从服务器中找key为JSESSIONID的session对象,如果都没有,则创建一个新的session。如果用户禁用了cookie,则只能通过URL重写方式实现会话跟踪!

一、在Servlet中实现URL重写:

   客户端在访问本Servlet后,会返回主页面:

  1. package edu.session;  
  2. import java.io.IOException;  
  3. import java.io.PrintWriter;  
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServlet;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. public class EncodeURL extends HttpServlet {  
  10.   
  11.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  12.             throws ServletException, IOException {  
  13.         response.setCharacterEncoding("utf-8");  
  14.         response.setContentType("text/html;charset=utf-8");  
  15.         PrintWriter out = response.getWriter();  
  16.         request.getSession();  //创建session  
  17.         //调用response的encodeURL方法,将自动将JSESSION追加到url后面,如:url;jsessionid=BD111FFC653497E81B702A29B3AC6FE4  
  18.         String buyurl = response.encodeURL("/CookieAndSession/servlet/buy");  
  19.         String payurl = response.encodeURL("/CookieAndSession/servlet/pay");  
  20.         out.print("<a href='"+buyurl+"'>购买</a><br/>");  
  21.         out.print("<a href='"+payurl+"'>结账</a><br/>");  
  22.           
  23.     }  
  24.   
  25. }  
http://localhost:8080/CookieAndSession/servlet/encodeurl(此事后cookie被禁用了)

源代码:

这样即可实现回跟踪。

  注意:

  1. 但是如果用户禁用cookie,则关闭了浏览器后,重新开启浏览器,则回话失效,无法实现回话跟踪;如果是用户没有禁用cookie,则可以通过设置装载JSESSIONID的cookie的失效时间来控制浏览器关闭后session仍未失效。

   2.如果用户没有禁用cookie,而且又使用URL重写,则:用户在第一次访问EncodeURLServlet时,由于不知道用户是否禁用了cookie,所以response.encodeURL()方法内部会将JSESSIONID重写在url上,但是一旦第二次访问时,由于用户是带着cookie来的,所以response.encodeURL()不会将JSESSIONID重写在url上。


版权声明:本文为博主原创文章,未经博主允许不得转载。

.